
package com.gitee.sop.layui.adminserver.module.background.admin.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gitee.sop.layui.adminserver.module.background.admin.entity.SysApplication;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author: admin
 * @date: 2020-04-24
 * @version: 1.0.0
 */
public interface SysApplicationMapper extends BaseMapper<SysApplication> {

    /**
     * 查询指定用户关联的所有应用信息
     *
     * @param userUuid 用户uuid
     * @return
     */
    List<SysApplication> selectListByRelationUser(@Param("userUuid") String userUuid);

    /**
     * 查询指定用户关联的所有应用信息总数
     *
     * @param userUuid 用户uuid
     * @return
     */
    int selectCountByRelationUser(@Param("userUuid") String userUuid);

    /**
     * 查询指定用户创建的所有应用信息
     *
     * @param creatorUuid 创建用户uuid
     * @return
     */
    List<SysApplication> selectListByCreatorUser(@Param("creatorUuid") String creatorUuid);

    /**
     * 查询指定应用id指定用户的数据
     *
     * @param appId       应用id
     * @param creatorUuid 创建用户uuid
     * @return
     */
    SysApplication selectOneByAppIdAndCreatorUuid(@Param("appId") String appId, @Param("creatorUuid") String creatorUuid);

    /**
     * 在插入节点前，更新插入节点后，树的节点变化情况
     *
     * @param treeGroup              插入节点的根节点树分组
     * @param treeLeftTraverseNumber 插入节点的根节点树左遍历序号
     */
    void updateTreeInfoAtInsert(@Param("treeGroup") String treeGroup, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber);

    /**
     * 在删除节点前，更新删除节点后，树的节点变化情况
     *
     * @param treeGroup              删除节点根节点节点树分组
     * @param treeLeftTraverseNumber 删除节点根节点树左遍历序号
     * @param count                  删除节点个数
     */
    void updateTreeInfoAtDelete(@Param("treeGroup") String treeGroup, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber, @Param("count") int count);

    /**
     * 查询指定树分组，指定层级，指定遍历序号的所有子节点
     *
     * @param treeGroup              树分组
     * @param treeLevel              树层级
     * @param treeLeftTraverseNumber 树左遍历序号
     * @return
     */
    List<SysApplication> selectChildListTreeBy(@Param("treeGroup") String treeGroup, @Param("treeLevel") int treeLevel, @Param("treeLeftTraverseNumber") int treeLeftTraverseNumber);

    /**
     * 查询指定应用id的应用信息
     *
     * @param appIdList 应用id列表
     * @return
     */
    List<SysApplication> selectListInAppId(@Param("appIdList") List<String> appIdList);

    /**
     * 查询指定应用id的应用信息
     *
     * @param appId 应用id
     * @return
     */
    SysApplication selectOneByAppId(@Param("appId") String appId);
}
